package com.cskaoyan.javase.oop1._10static._2compare;
/**
 * 比较局部变量,成员变量,静态成员变量
 * 成员的所属
 *      1.局部变量 没有这种概念,它仅在作用域内部生效
 *      2.成员变量 属于对象,必须创建对象,然后才能使用
 *      3.静态成员变量 属于类,不需要创建对象,依赖于类加载的过程
 *
 * 在内存中的位置
 *      1.局部变量: 方法的栈帧中
 *      2.成员变量: 堆上的对象中
 *      3.静态成员变量: Java8后也是存储在堆上
 *
 * 调用方式
 *      1.局部变量: 直接用即可
 *      2.成员变量: 必须依赖于对象,一般使用"对象名."
 *      3.静态成员变量: 不依赖对象,"类名."
 *
 * 在内存中出现的时间
 *      1.局部变量: 和方法调用同生共死,方法调用就生效,方法执行完毕就销毁
 *      2.成员变量: 创建对象,成员变量就开辟空间出现了.
 *      3.静态成员变量: 依赖于类加载,类加载的过程一定是先于new对象的
 *
 *
 * 成员方法 vs 静态成员方法
 * 只需要搞清楚两个问题:
 *      1.在能够调用成员方法的时候,能不能直接访问类的静态成员呢?
 *          当然是可以的
 *          为什么?
 *          既然能调用成员方法,说明对象已经存在,那么一定类加载了
 *          类加载后,静态成员就可以访问了
 *
 *      2.在能够调用静态成员方法的时候,能不能直接访问类的普通成员呢?
 *          当然是不可以的
 *          为什么?
 *          静态方法只依赖于类加载的过程,类加载并不一定是new对象触发的
 *          类加载和对象没有必然关系
 *          也就是说static方法中没有对象,没有this传参
 *
 *
 * @since 16:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // test();
        Demo d = new Demo();
        d.test();

        testStatic();
    }

    public void test(){}
    public static void testStatic(){}
}
